package com.maxlen.cart.controller;

import com.maxlen.cart.entity.vo.CartVO;
import com.maxlen.cart.service.CartService;
import com.maxlen.common.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequestMapping("/cart/cart")
@RestController
public class CartController {

    @Autowired
    private CartService cartService;

    @GetMapping("/isCheckTrue")
    public R isCheckTrue(@RequestParam("id") String id){
        return cartService.isCheckTrue(id);
    }

    /**
     * 获取当前用户购物车选中的商品并且只返回有货的
     * @param id
     * @return
     */
    @GetMapping("/currentUserCartItemByCheckWithHasStock/{memberId}")
    public R currentUserCartItemByCheckWithHasStock(@PathVariable("memberId") Long id){
        return cartService.getCurrentUserCartItemByCheckWithHasStock(id);
    }

    /**
     * 获取当前用户购物车选中的商品
     * @param id
     * @return
     */
    @GetMapping("/currentUserCartItemByCheck/{memberId}")
    public R currentUserCartItemByCheck(@PathVariable("memberId") Long id){
        return cartService.getCurrentUserCartItemByCheck(id);
    }

    /**
     * 根据 id 获取购物车信息
     * id 可能是离线 key 或者 token
     * @param id
     * @return
     */
    @GetMapping("/getCart")
    public R getCart(
            @RequestParam("id") String id){
        return cartService.getCart(id);
    }

    /**
     * 获取购物车商品信息
     * 如果两个值都传入，将 id 的购物车信息合并到 token 中
     * @param id
     * @param token
     * @return
     */
    @GetMapping("/getCartItem")
    public R getCartItem(
            @RequestParam(value = "id", required = false) String id,
            @RequestParam(value = "token", required = false) String token){
        List<CartVO.CartItemVO> cartItemVOList = cartService.getCartItem(id, token);
        return R.ok().put("data", cartItemVOList);
    }

    /**
     * 加入购物车
     * 可选择加入购物车商品的数量
     * @param skuId
     * @param id
     * @param count
     * @return
     */
    @GetMapping("/setCartItem")
    public R setCartItem(
            @RequestParam("skuId") Long skuId,
            @RequestParam("id") String id,
            @RequestParam(value = "count", required = false) Integer count){
        return cartService.setCartItem(skuId, id, count);
    }

    /**
     * 设置购物车某个商品是否选中
     * @param id
     * @param skuId
     * @return
     */
    @GetMapping("/setCartItemCheck")
    public R setCartItemCheck(
            @RequestParam("id") String id,
            @RequestParam("skuId") Long skuId){
        return cartService.setCartItemCheck(id, skuId);
    }

    /**
     * 设置购物车全部商品全选或全不选
     * @param id
     * @param check
     * @return
     */
    @GetMapping("/setCartItemCheckAll")
    public R setCartItemCheckAll(
            @RequestParam("id") String id,
            @RequestParam("check") Boolean check){
        return cartService.setCartItemCheckAll(id, check);
    }

    /**
     * 修改购物车某个商品的数量
     * @param id
     * @param skuId
     * @param count
     * @return
     */
    @GetMapping("/setCartItemCount")
    public R setCartItemCount(
            @RequestParam("id") String id,
            @RequestParam("skuId") Long skuId,
            @RequestParam("count") Integer count){
        return cartService.setCartItemCount(id, skuId, count);
    }

    /**
     * 删除单个购物车商品
     * @param id
     * @param skuId
     * @return
     */
    @GetMapping("/delCartItem")
    public R delCartItem(
            @RequestParam("id") String id,
            @RequestParam("skuId") Long skuId){
        return cartService.delCartItem(id, skuId);
    }

    /**
     * 删除多个购物车商品
     * @param id
     * @param skuId
     * @return
     */
    @PostMapping("/batchDelCartItem")
    public R batchDelCartItem(
            @RequestParam("id") String id,
            @RequestBody List<String> skuId){
        return cartService.batchDelCartItem(id, skuId);
    }

    /**
     * 删除多个购物车商品
     * @param memberId
     * @param skuId
     * @return
     */
    @PostMapping("/batchDelCartItemByMember")
    public R batchDelCartItemByMember(
            @RequestParam("id") String memberId,
            @RequestBody List<String> skuId){
        return cartService.batchDelCartItemByMember(memberId, skuId);
    }

}
